package com.cp.admin.modular.system.service;

import com.baomidou.mybatisplus.plugins.Page;
import com.baomidou.mybatisplus.service.IService;
import com.cp.admin.api.entity.vo.UserVO;
import com.cp.admin.modular.system.model.User;
import com.cp.admin.core.datascope.DataScope;
import com.cp.admin.modular.system.warpper.DeptUserVO;
import com.cp.core.node.ZTreeNode;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**
 * <p>
 * 管理员表 服务类
 * </p>
 *
 * @author stylefeng123
 * @since 2018-02-22
 */
public interface IUserService extends IService<User> {

    /**
     * 修改用户状态
     */
    int setStatus(@Param("userId") Integer userId, @Param("status") int status);

    /**
     * 修改密码
     */
    int changePwd(@Param("userId") Integer userId, @Param("pwd") String pwd);

    /**
     * 根据条件查询用户列表
     */
    List<Map<String, Object>> selectUsers(@Param("dataScope") DataScope dataScope, @Param("name") String name, @Param("beginTime") String beginTime, @Param("endTime") String endTime, @Param("deptid") Integer deptid);

    /**
     * 设置用户的角色
     */
    int setRoles(@Param("userId") Integer userId, @Param("roleIds") String roleIds);

    /**
     * 通过账号获取用户
     */
    User getByAccount(@Param("account") String account);

    /**
     * 用户依部门的树形结构
     * @return
     */
    List<ZTreeNode> userDeptZTreeList();

    /**
     * 获取部门下的用户列表
     * @param deptId    部门ID
     * @return
     */
    List<User> getUserByDept(Long deptId);

    /**
     * 根据名字搜索员工
     * @param pageNo
     * @param pageSize
     * @param searchKey
     * @return
     */
    Page<UserVO> searchUser(Integer pageNo, Integer pageSize, String searchKey);

    /**
     * 员工的常用联系人
     * @param pageNo
     * @param pageSize
     * @param userId
     * @return
     */
    Page<UserVO> commonUser(Integer pageNo,Integer pageSize,Long userId);

    /**
     * 常用联系人
     * @param userId    用户Id
     * @return
     */
    List<UserVO> commonUser(Long userId);
    /**
     * 所有部门会员列表
     * @return
     */
    DeptUserVO deptUserList();

    /**
     * 获取指定父级部门下的子部门
     * @param pId   父级部门ID
     * @return
     */
    List<DeptUserVO> deptUserList(Long pId);

    /**
     * 判断是否有管理权限（!6）
     * @param userId
     * @return
     */
    boolean isScope(Long userId);

    /**
     * 获取用户所在部门及子部门
     * @param userId
     * @return
     */
    List<Long> getUserDataScope(Long userId);
}
